package objetos.proyectiles;

import juego.Escenario;
import movimiento.Posicion;
import movimiento.patrones.Rectas;
import objetos.Danio;
import objetos.ObjetoMovil;
import objetos.ObjetoNoControlado;
import objetos.aeronaves.Algo42;
import org.jdom.*;
import auxiliares.Vector;

/*
 * Clase que modela el comportamiento b�sico de los proyectiles.
 */
public abstract class Proyectil extends ObjetoNoControlado {
	private ObjetoMovil origen = null;
	private Danio poder = null;

	public Proyectil() {
	}

	public Proyectil(ObjetoMovil origen) {
		super();
		setTamanio(5);
		setBando(origen.getBando());
		int velocidadY = 3;
		if (origen.getVelocidad().getComponenteY() < 0) {
			velocidadY *= -1;
		}
		setVelocidad(new Vector(0, velocidadY));
		setPatron(new Rectas());
		this.origen = origen;
	}

	public Proyectil(ObjetoMovil origen, Posicion posicion) {
		this(origen);
		setPosicion(posicion);
	}

	public Proyectil(ObjetoMovil origen, int x, int y) {
		this(origen, new Posicion(x, y));
	}

	@Override
	public void retornarAlCombate() {
		/*
		 * Al irse un poco m�s alla de la pantalla los proyectiles son
		 * destruidos.
		 */
		int y = this.getPosicion().getEnY();
		int maxY = Escenario.getInstance().getMaxY();
		if (y < -50 || y > maxY + 50) {
			this.destruir();
		}
	}

	public void daniarObjetoMovil(ObjetoMovil aeronave) {
		aeronave.recibirDanio(poder);
	}

	@Override
	public void colisionConAlgo42(Algo42 algo42) {
		algo42.colisionConProyectil(this);
	}

	public int getCantidadDanio() {
		return this.poder.getCantidad();
	}

	public void setOrigen(ObjetoMovil origen) {
		this.origen = origen;
	}

	public ObjetoMovil getOrigen() {
		return origen;
	}

	public void setPoder(Danio poder) {
		this.poder = poder;
	}

	public Danio getPoder() {
		return poder;
	}

	/* Persistencia */

	/* NodoXML a partir de instancia */
	@Override
	public Element obtenerNodo() {
		Element nodo = new Element("Torpedo");
		nodo.setAttribute(new Attribute("poder", this.getPoder().toString()));
		return nodo;
	}

}
